[C] Decompositor de números em fatores primos

Publicado por Enzo de Brito Ferber 27/06/2007

[ Hits: 10.293 ]

Homepage: http://www.maximasonorizacao.com.br

Download decom_primes.c




Como o nome já diz, um programa escrito em C, que decompõe um número qualquer em fatores primos e exibe estes números para o usuário.

  



Esconder código-fonte

/*
 * Programa: Decompositor de numeros
 * Arquivo : decom_primes.c
 * Autor   : Enzo Ferber 'Slackware_10'
 */

#include <stdio.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0

int *lista_primos(int size){
    int prime, i=0, a, b;
    int *list = (int*)malloc(size*sizeof(int));
    if(!list){
        printf("[-] Erro ao alocar memoria.\n");
        printf("[-] Abortando...\n");
        exit(0);
    }
    for(a=2;a<size;a++){
        prime = FALSE;
        for(b=1;b<=a;b++){
            if(b == a) prime = TRUE;
            if(((a%b)==0) && (b != 1)) break;
        }
        if(prime) list[i] = a;
        if(prime) i += 1;
    }
    list[i] = 0x0;
    return list;
}

int *fatores_primos(int num){
    int *lista = lista_primos(num+1);
    int *fatores = (int*)malloc(num*sizeof(int));
    register int i;
    int div_atual, fat_atual, list_ref, ref;
    
    ref = num;
    fat_atual = 0;
    list_ref = 0;
    div_atual = lista[list_ref];
    
    for(i=0; i<num; i++){
        if(ref == 1){
            fatores[fat_atual] = 1;
            break;
        }
        if((ref % div_atual) == 0){
            ref = ref / div_atual;
            fatores[fat_atual] = div_atual;
            fat_atual++;
        }
        if((ref % div_atual) != 0) div_atual = lista[++list_ref];
    }
    
    free(lista);
    fatores[fat_atual+1] = 0x0;
    return fatores;
}

int main(int argc, char *argv[]){
    int *list;
    if(argc != 2){
        printf("[-] Uso: %s <numero_a_fatorar>\n", argv[0]);
        printf("[-] Abortando...\n");
        exit(0);
    }
    list = fatores_primos(atoi(argv[1]));
    while(*list) printf("%d\n", *list++);
    return 0;
}

    

    

Scripts recomendados

Manipulando árvores.

Sequencia Fibonacci

Olá mundo no GTK

Infixa para Pós-fixa em C

Boletim Escolar Com Manipulação de Arquivo


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts